home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / system / mail / transpor / ifmail23.z / ifmail23 / ifmail / ifgate / backalias.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-04  |  1.4 KB  |  77 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "xutil.h"
  4. #include "lutil.h"
  5. #include "ftn.h"
  6.  
  7. char *backalias(faddr *);
  8. void readalias(char *);
  9.  
  10. static struct aliaslist {
  11.     struct aliaslist *next;
  12.     faddr *addr;
  13.     char *alias;
  14. } *alist = NULL;
  15.  
  16. char *backalias(fa)
  17. faddr *fa;
  18. {
  19.     struct aliaslist *tmp;
  20.  
  21.     for (tmp=alist;tmp;tmp=tmp->next)
  22.     if ((!fa->domain || !tmp->addr->domain ||
  23.          !strcasecmp(fa->domain,tmp->addr->domain)) &&
  24.         (!fa->zone   || (fa->zone == tmp->addr->zone)) &&
  25.         (fa->net == tmp->addr->net) &&
  26.         (fa->node == tmp->addr->node) &&
  27.         (fa->point == tmp->addr->point) &&
  28.         (strcasecmp(fa->name,tmp->addr->name) == 0))
  29.     {
  30.         debug(6,"Address \"%s\" has local alias \"%s\"",
  31.             ascinode(fa,0x7f),tmp->alias);
  32.         return tmp->alias;
  33.     }
  34.     return NULL;
  35. }
  36.  
  37. void readalias(fn)
  38. char *fn;
  39. {
  40.     FILE *fp;
  41.     char buf[256],*k,*v;
  42.     struct aliaslist *tmp=NULL;
  43.     faddr *ta = NULL;
  44.  
  45.     if ((fp=fopen(fn,"r")) == NULL)
  46.     {
  47.         logerr("$cannot open system alias file %s",fn);
  48.         return;
  49.     }
  50.     while (fgets(buf,sizeof(buf)-1,fp))
  51.     {
  52.         k=strtok(buf," \t:");
  53.         v=strtok(NULL," \t:");
  54.         if (k && v)
  55.         if ((ta=parsefaddr(v)))
  56.         {
  57.             if (alist)
  58.             {
  59.                 tmp->next=(struct aliaslist *)
  60.                     xmalloc(sizeof(struct aliaslist));
  61.                 tmp=tmp->next;
  62.             }
  63.             else
  64.             {
  65.                 alist=(struct aliaslist *)
  66.                     xmalloc(sizeof(struct aliaslist));
  67.                 tmp=alist;
  68.             }
  69.             tmp->next=NULL;
  70.             tmp->addr=ta;
  71.             ta=NULL;
  72.             tmp->alias=xstrcpy(k);
  73.         }
  74.     }
  75.     fclose(fp);
  76. }
  77.